iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
自我挑戰組

初學C#之路:30天基礎學習與實作紀錄系列 第 9

Day9-方法和傳遞機制Part2

  • 分享至 

  • xImage
  •  

參數Params

進行引數傳遞時,若引數不固定數目,可使用方法參數params;
當方法中已使用了方法參數params,就無法再使用其他的方法參數。
而且方法方法中params關鍵字只能使用一次,
什麼情況下會使用方法參數params?通常是處理陣列元素!
由於陣列的長度可能不一致,配合for迴圈,更能靈活讀取陣列元素。

//student.cs
namespace ConsoleApp4
{
    class Student
    {
       public static void CalcScore(params int[] one)
        {
            int sum = 0; double average = 0.0;
            for (int count = 0; count < one.Length; count++)
            sum += one[count];
            average = (double)sum / one.Length;
            Console.WriteLine($"總分={sum},平均 = {average}");

        }

    }
}
//program.cs
namespace ConsoleApp4 // 加入命名空間,保持一致
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] scorel = { 78, 96, 45, 33 };
            Console.WriteLine($"Peter 修了 {scorel.Length} 科\n");  
            // 使用 {scorel.Length} 來顯示科目數量
            Student.CalcScore(scorel);  // 使用類別名稱調用靜態方法
        }
    }
}

https://ithelp.ithome.com.tw/upload/images/20240926/20121669iWpeIg4MF3.png

關鍵字ref和out不同
傳遞機制中採用傳址呼叫時,方法參數是ref或out都必須加在實際引數和形式參數前端。
它們的最大差異,有ref關鍵字的實際引數必須先做初始化,而out關鍵字則不用將變數設定初始化,但必須在方法內完成變數值的指派動作。

//student.cs
namespace ConsoleApp4
{
    class Student
    {
        // 定義 intArray 方法來初始化並返回一個整數陣列
        public static void intArray(out int[] one)
        {
            // 這裡初始化一個整數陣列,長度為4
            one = new int[] { 78, 96, 45, 33 };
        }
    }
}
//program.cs
namespace ConsoleApp4 // 加入命名空間,保持一致
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] two;
            Student.intArray(out two);  
            // 呼叫 Student 類別的 intArray 方法
            Console.WriteLine("陣列元素:");
            for (int i = 0; i < two.Length; i++)
            {
                Console.WriteLine(two[i] + "");  
                // 輸出陣列中的每個元素
            }
        }
    }
}

https://ithelp.ithome.com.tw/upload/images/20240926/20121669oYDEPGJGNu.png

比對差異
https://ithelp.ithome.com.tw/upload/images/20240926/20121669VS6HItJ0di.png

以上來源:從零開始學visual C# 2017程式設計、W3Schools、詢問chatGPT
內容有誤的話,請留言或發訊息給我


上一篇
Day8-C#物件導向基礎學習Part2
下一篇
Day10-物件導向基礎學習Part3
系列文
初學C#之路:30天基礎學習與實作紀錄10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言